骚操作:为了求职,劫持十几个热门 Packagist PHP 包
编译:代码卫士
昵称为 “neskafe3v1” 的研究员劫持了十几个 Packagist 包,目的是为了找到一份工作。其中一些包的总安装量达到数亿次,而该研究员似乎对此信心满满。
至少劫持了14个 Packagist 包
这名名为 “neskafe3v1” 的研究员主动联系 BleepingComputer 媒体表示已接管超过14个 Packagist 包,其中一个包的安装量超过5亿次。Packagist 是 PHP 包的主要注册表,通过依赖管理工具 Composer 安装。Packagist 并不会托管这些包而是充当元数据目录,将开源包发布到 GitHub 上。之后,开发人员可通过运行 composer install 命令在机器上安装这些包。
遭劫持的包的名称包括:
包名称 | 安装总数 |
acmephp/acmephp | 124,860 |
acmephp/core | 419,258 |
acmephp/ssl | 531,692 |
doctrine/doctrine-cache-bundle | 73,490,057 |
doctrine/doctrine-module | 5,516,721 |
doctrine/doctrine-mongo-odm-module | 516,441 |
doctrine/doctrine-orm-module | 5,103,306 |
doctrine/instantiator | 526,809,061 |
growthbook/growthbook | 97,568 |
jdorn/file-system-cache | 32,660 |
jdorn/sql-formatter | 94,593,846 |
khanamiryan/qrcode-detector-decoder | 20,421,500 |
object-calisthenics/phpcs-calisthenics-rules | 2,196,380 |
tga/simhash-php (aka tgalopin/simhashphp) | 30,555 |
该研究员提供证据演示称,他在5月1日修改了这些包的 Packagist 页面并指向自己的(虚假)仓库而不是每个包的合法 GitHub 仓库。这些变化目前已被 Packagist 团队修正。
Packagist 上的发布流程和开源仓库如 npm 或 PyPI 的流程稍有不同。开发人员并未直接将二进制或软件发布到 Packagist.org,而是创建一个 Packagist.org 账户,并将链接“提交”到某个包的 GitHub 仓库中。Packagist 的爬虫之后访问该仓库并将所有数据展示在该包的 Packagist 页面上。
当开发人员通过 “install” 或 “update” 命令运行 Composer 时,其Composer 实例首先可能会查看这些包是否存在于本地,如不存在,则默认在 Packagist 上搜索该包并检索该包的 GitHub URL。之后,在该包的 Packagist 页面上所列的 GitHub 仓库上下载该包的内容。这种方式和 npm 或 PyPI 的运作方式完全不同,后者直接从服务器托管并分发所发布的软件。
通过修改每个包的 Packagist 页面,该研究员实际上劫持了 Composer 环境中所使用的安装工作流。开发人员将从 neskafe3v1 的 GitHub 仓库而非项目仓库中获取包内容。为了将演示控制到最小化,该研究员仅修改了 composer.json 文件,与这些包中的一个应用程序清单相关联:
"Pwned by neskafe3v1.... Ищу работу на позиции Application Security, Penetration Tester, Cyber Security Specialist."
他分叉了原始的项目仓库,修改了 composer.json 中的“描述”字段,并将变更提交到已分叉的仓库中。他并未将变更融合到原始仓库中(这样做要求更多访问权限,而且很可能会引起维护人员的审查)。该研究员显然获得对维护人员 Packagist 账户的访问权限并将所列包的 GitHub URL 更改为所分叉仓库的URL。但是,他并未透露劫持的确切方法,只是表示他并未利用 0day,而是利用了一种已知技术。然而,该研究员并未说明通过何种方式实现这种劫持,如通过攻陷凭据、利用过期域名接管维护人员的邮件地址等。
该研究员表示,“如你所见,我正在求职,因此我找到工作后会发布一份报告”,并提到整个劫持活动是“以员工身份对我自己的营销。如不成功,则不会谈论任何情况”。
通过攻陷凭据实施劫持
Packagist 团队表示,截止目前并未发现因劫持造成的恶意影响,同时证实接管确实源自维护人员账户凭据被攻陷。
Packagist.org 的成员兼 Composer 的原始开发人员之一 Nils Aderman 指出,“就我们所致,这起事件并未用于任何恶意目的,仅限于某些密码不安全且缺乏双因素认证的一些老旧账户。这四个账户似乎都使用了此前其它平台安全事件中泄漏的共享密码。请不要复用密码。5月2日早上7:21(协调世界时),Juha Suni 通知我们称多个 Doctrine 包的URL 遭修改。”
Packagist 管理员与 Marco Pivetta 即 Ocramius 一起迅速找到所有遭访问的账户,禁用其访问权限并将 GitHub URL 恢复到原来的值。这一恢复工作在本周二早晨完成。
该研究员还提到,他并未滥用该技术分发恶意软件,但同时表示并未将这一实验告知 Packagist 或包所有人,这就引起该研究的“道德”问题。他提到,“我做的唯一一件事是修改了 composer.json 文件中的‘描述’字段。我将原始的 github.com/acmephp/core 链接更改到我的分支里。目前并不存在恶意软件,可以将原始文件 diff 到我的。我并未将该攻击事件告知任何人,Packagist 管理员或包所有人均不知情。”
Packagist 管理员在博客文章中要求研究人员以负责任的方式报告漏洞。文章提到,“如果你是一名安全研究员且知道一个 Packagist.org 漏洞或者希望在 Packagist.org 上开展研究,请与我们协调测试工作以免造成负面的用户影响,另外请负责任地披露这些漏洞。可通过 security@packagist.org 与我们取得联系,我们将及时回复所有请求或报告。当然我们将对所报告漏洞进行致谢并发布相关详情。”
PHP包管理器Composer组件 Packagist中存在漏洞,可导致软件供应链攻击
赶快修复:最大的 PHP 软件包仓库 Packagist 被曝严重漏洞
https://www.bleepingcomputer.com/news/security/researcher-hijacks-popular-packagist-php-packages-to-get-a-job/
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。